package cc.vv.btpartyjob.jnimodule.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import cc.vv.btpartyjob.jnimodule.R;
import cc.vv.lkbasecomponent.util.LKScreenUtil;


/**
 * 缺省view控件.
 * xml设置好
 * <ul>
 * <li>无数据图片/文字</li>
 * <li>无网络图片/文字</li>
 * <li>重新加载按钮的文字</li>
 * </ul>
 *
 * @author dup dupeng@vv.cc
 * @date 2018/3/22
 */

public class NoDataView extends RelativeLayout {
    public enum TYPE {
        /**
         * 暂无数据
         */
        TYPE_NO_DATA(R.mipmap.ic_launcher, R.string.str_no_data),
        /**
         * 暂无评论
         */
        TYPE_NO_COMMENT(R.mipmap.ic_launcher, R.string.str_no_comment),
        /**
         * 没有列表数据
         */
        TYPE_NO_LISTDATA(R.mipmap.ic_launcher, R.string.str_no_listdata),
        /**
         * 没有网络
         */
        TYPE_NO_NET(R.mipmap.ic_launcher, R.string.str_no_net),
        /**
         * 没有公告
         */
        TYPE_NO_NOTICE(R.mipmap.ic_launcher, R.string.str_no_notice),
        /**
         * 没有联系人
         */
        TYPE_NO_CONTACT(R.mipmap.ic_launcher, R.string.str_no_contact),
        /**
         * 没有搜索结果
         */
        TYPE_NO_SEARCH(R.mipmap.ic_launcher, R.string.str_no_search),
        /**
         * 没有聊天消息
         */
        TYPE_NO_CHAT_MESSAGE(R.mipmap.ic_launcher, R.string.str_no_message);

        public int drawableRes;
        public int txtRes;

        TYPE(int drawableRes, int txtRes) {
            this.drawableRes = drawableRes;
            this.txtRes = txtRes;
        }
    }

    /**
     * 设置默认的资源
     */
    private TYPE mDefType = TYPE.TYPE_NO_DATA;
    private Drawable backgroundDrawable = null;
    private boolean isShowBtn = false;

    /**
     * 上下文
     */
    private Context context;

    /**
     * 图片
     */
    private ImageView iv_noData;

    /**
     * 描述
     */
    private TextView tv_noData;

    /**
     * 重新加载按钮
     */
    private TextView tv_reload;
    /**
     * view的背景控件
     */
    private RelativeLayout rl_vn_bg;

    /**
     * 事件接口对象
     */
    ReloadInterface reloadInterface = null;


    public NoDataView(Context context) {
        this(context, null);
    }

    public NoDataView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public NoDataView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
        initView(attrs, defStyleAttr);
        initViewEvent();
    }

    /**
     * 初始化布局控件
     */
    private void initView(AttributeSet attrs, int defStyleAttr) {
        if (context == null) {
            return;
        }
        backgroundDrawable = new ColorDrawable(context.getResources().getColor(R.color.color_FFFFFF));

        View view = LayoutInflater.from(context).inflate(R.layout.view_nodata, null);
        if (view != null) {
            iv_noData = view.findViewById(R.id.iv_noData);
            tv_noData = view.findViewById(R.id.tv_noData);
            tv_reload = view.findViewById(R.id.tv_reload);
            rl_vn_bg = view.findViewById(R.id.rl_vn_bg);

            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.NoDataView, defStyleAttr, 0);
            backgroundDrawable = a.getDrawable(R.styleable.NoDataView_ndv_background_drawable);
            isShowBtn = a.getBoolean(R.styleable.NoDataView_ndv_isShowBtn, isShowBtn);

            //1.设置背景
            if (backgroundDrawable != null) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    rl_vn_bg.setBackground(backgroundDrawable);
                } else {
                    rl_vn_bg.setBackgroundDrawable(backgroundDrawable);
                }
            }

            //2.设置btn是否显示
            if (isShowBtn) {
                tv_reload.setVisibility(View.VISIBLE);
            } else {
                tv_reload.setVisibility(View.INVISIBLE);
            }

            a.recycle();

            //3.设置图片和文字
            if (mDefType != null) {
                iv_noData.setImageResource(mDefType.drawableRes);
                tv_noData.setText(mDefType.txtRes);
            }

            view.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                }
            });
            this.addView(view, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        }
    }

    /**
     * 初始化布局控件事件
     */
    private void initViewEvent() {
        //带有relayout布局的加载
        if (tv_reload == null) {
            return;
        }
        tv_reload.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (reloadInterface != null) {
                    close();
                    reloadInterface.reloadOnClick();
                }
            }
        });
    }

    /**
     * 设置重新加载的内容
     * <p>
     * /**
     * 设置重新加载的字体颜色
     */
    public void setLoadTextColor(int color) {
        if (tv_reload == null) {
            return;
        }
        tv_reload.setTextColor(color);
    }

    /**
     * 设置重新加载的字体颜色
     */
    public void setLoadTextSize(int size) {
        if (tv_reload == null) {
            return;
        }
        tv_reload.setTextSize(size);
    }

    /**
     * 设置重新加载按钮背景图
     *
     * @param resId 背景资源
     */
    public void setLoadTextBackground(int resId) {
        if (tv_reload == null || context == null) {
            return;
        }
        tv_reload.setBackgroundResource(resId);
    }

    /**
     * 重新加载按钮文本
     *
     * @param str
     */
    public void setLoadText(String str) {
        tv_reload.setText(str);
    }


    /**
     * 设置图片
     *
     * @param resId 图片
     */
    public void setImageResource(int resId) {
        if (iv_noData == null) {
            return;
        }
        iv_noData.setImageResource(resId);
    }


    /**
     * 设置图片的大小
     *
     * @param width  宽度  dp
     * @param height 高度 dp
     */
    public void setPictureWidthAndHeight(int width, int height) {
        if (iv_noData == null) {
            return;
        }
        ViewGroup.LayoutParams layoutParams = iv_noData.getLayoutParams();
        layoutParams.width = LKScreenUtil.dp2px(width);
        layoutParams.height = LKScreenUtil.dp2px(height);
        iv_noData.setLayoutParams(layoutParams);
    }

    /**
     * 设置文本内容
     *
     * @param content 无数据的内容
     */
    public void setTextContent(String content) {
        if (tv_noData == null) {
            return;
        }
        if (TextUtils.isEmpty(content)) {
            tv_noData.setVisibility(View.GONE);
        } else {
            tv_noData.setText(content);
            tv_noData.setVisibility(View.VISIBLE);
        }
    }

    /**
     * 设置文本字体颜色
     */
    public void setTextColor(int color) {
        if (tv_noData == null) {
            return;
        }
        tv_noData.setTextColor(color);
    }

    /**
     * 设置无数据内容字体大小
     **/
    public void setTextSize(int size) {
        if (tv_noData == null) {
            return;
        }
        tv_noData.setTextSize(size);
    }


    /**
     * 设置imageview是否显示
     *
     * @param visible
     */
    public void setPictureVisible(int visible) {
        iv_noData.setVisibility(visible);
    }

    /**
     * 设置事件接口对象
     */
    public void setEventInterface(ReloadInterface reloadInterface) {
        this.reloadInterface = reloadInterface;
        initViewEvent();
    }

    /**
     * 关闭
     */
    public void close() {
        setVisibility(View.GONE);
    }

    /**
     * 展示类型.
     *
     * @param type
     */
    public void showType(TYPE type) {
        if (type != null) {
            if (this.getVisibility() != VISIBLE) {
                setVisibility(View.VISIBLE);
            }
            mDefType = type;
            iv_noData.setImageResource(mDefType.drawableRes);
            tv_noData.setText(mDefType.txtRes);
        }
    }

    @Override
    public void setVisibility(int visibility) {
        super.setVisibility(visibility);
        if (visibility == View.VISIBLE) {
            bringToFront();
        }
    }

    /**
     * 设置重新加载显示
     * 默认影藏此控件
     *
     * @param isShow 是否显示此控件
     */
    public void setReloadShow(boolean isShow) {
        if (tv_reload == null) {
            return;
        }
        isShowBtn = isShow;
        if (isShow) {
            tv_reload.setVisibility(VISIBLE);
        } else {
            tv_reload.setVisibility(INVISIBLE);
        }
    }


    public interface ReloadInterface {
        /**
         * 重新加载点击事件
         */
        void reloadOnClick();

    }

}
